Introduce mechanism to check standard conformance of headers
authorKeir Fraser <keir.fraser@citrix.com>
Wed, 17 Jun 2009 06:21:03 +0000 (07:21 +0100)
committerKeir Fraser <keir.fraser@citrix.com>
Wed, 17 Jun 2009 06:21:03 +0000 (07:21 +0100)
While pretty simplistic, it appears to serve the purpose at the moment
(i.e. it spotted two places where a GNU extension was used withou
proper preprocessor conditionals). The "simplistic" here includes that
the checking gets only done for native builds, and ia64 gets excluded
due to its arch-specific header intentionally (for whatever reason)
checking that anonymous struct/unions can be used.

Signed-off-by: Jan Beulich <jbeulich@novell.com>
16 files changed:
extras/mini-os/fs-front.c
tools/fs-back/fs-ops.c
xen/arch/ia64/xen/platform_hypercall.c
xen/arch/x86/platform_hypercall.c
xen/include/Makefile
xen/include/headers.chk [new file with mode: 0644]
xen/include/public/event_channel.h
xen/include/public/grant_table.h
xen/include/public/hvm/hvm_op.h
xen/include/public/io/fsif.h
xen/include/public/io/xs_wire.h
xen/include/public/memory.h
xen/include/public/nmi.h
xen/include/public/physdev.h
xen/include/public/platform.h
xen/include/public/vcpu.h

index b72fadaacbf75fe02ad0e9f98df331d8b2fdfca4..b22266dd23895d0838c81f2aa7215aa9dc6b768b 100644 (file)
@@ -218,7 +218,7 @@ int fs_open(struct fs_import *import, char *file)
     schedule();
     
     /* Read the response */
-    fd = (int)fsr->shadow_rsp.ret_val;
+    fd = (int)fsr->shadow_rsp.u.ret_val;
     DEBUG("The following FD returned: %d\n", fd);
     free_buffer_page(fsr);
     add_id_to_freelist(priv_req_id, import->freelist);
@@ -256,7 +256,7 @@ int fs_close(struct fs_import *import, int fd)
     schedule();
     
     /* Read the response */
-    ret = (int)fsr->shadow_rsp.ret_val;
+    ret = (int)fsr->shadow_rsp.u.ret_val;
     DEBUG("Close returned: %d\n", ret);
     add_id_to_freelist(priv_req_id, import->freelist);
 
@@ -313,7 +313,7 @@ ssize_t fs_read(struct fs_import *import, int fd, void *buf,
     schedule();
     
     /* Read the response */
-    ret = (ssize_t)fsr->shadow_rsp.ret_val;
+    ret = (ssize_t)fsr->shadow_rsp.u.ret_val;
     DEBUG("The following ret value returned %d\n", ret);
     if(ret > 0)
     {
@@ -391,7 +391,7 @@ ssize_t fs_write(struct fs_import *import, int fd, void *buf,
     schedule();
     
     /* Read the response */
-    ret = (ssize_t)fsr->shadow_rsp.ret_val;
+    ret = (ssize_t)fsr->shadow_rsp.u.ret_val;
     DEBUG("The following ret value returned %d\n", ret);
     for(i=0; i<gnts.count; i++)
     {
@@ -435,10 +435,10 @@ int fs_stat(struct fs_import *import,
     schedule();
     
     /* Read the response */
-    ret = (int)fsr->shadow_rsp.ret_val;
+    ret = (int)fsr->shadow_rsp.u.ret_val;
     DEBUG("Following ret from fstat: %d\n", ret);
     memcpy(stat, 
-           &fsr->shadow_rsp.fstat, 
+           &fsr->shadow_rsp.u.fstat, 
            sizeof(struct fsif_stat_response));
     add_id_to_freelist(priv_req_id, import->freelist);
 
@@ -478,7 +478,7 @@ int fs_truncate(struct fs_import *import,
     schedule();
     
     /* Read the response */
-    ret = (int)fsr->shadow_rsp.ret_val;
+    ret = (int)fsr->shadow_rsp.u.ret_val;
     DEBUG("Following ret from ftruncate: %d\n", ret);
     add_id_to_freelist(priv_req_id, import->freelist);
 
@@ -520,7 +520,7 @@ int fs_remove(struct fs_import *import, char *file)
     schedule();
     
     /* Read the response */
-    ret = (int)fsr->shadow_rsp.ret_val;
+    ret = (int)fsr->shadow_rsp.u.ret_val;
     DEBUG("The following ret: %d\n", ret);
     free_buffer_page(fsr);
     add_id_to_freelist(priv_req_id, import->freelist);
@@ -575,7 +575,7 @@ int fs_rename(struct fs_import *import,
     schedule();
     
     /* Read the response */
-    ret = (int)fsr->shadow_rsp.ret_val;
+    ret = (int)fsr->shadow_rsp.u.ret_val;
     DEBUG("The following ret: %d\n", ret);
     free_buffer_page(fsr);
     add_id_to_freelist(priv_req_id, import->freelist);
@@ -621,7 +621,7 @@ int fs_create(struct fs_import *import, char *name,
     schedule();
     
     /* Read the response */
-    ret = (int)fsr->shadow_rsp.ret_val;
+    ret = (int)fsr->shadow_rsp.u.ret_val;
     DEBUG("The following ret: %d\n", ret);
     free_buffer_page(fsr);
     add_id_to_freelist(priv_req_id, import->freelist);
@@ -670,7 +670,7 @@ char** fs_list(struct fs_import *import, char *name,
     schedule();
     
     /* Read the response */
-    *nr_files = (fsr->shadow_rsp.ret_val & NR_FILES_MASK) >> NR_FILES_SHIFT;
+    *nr_files = (fsr->shadow_rsp.u.ret_val & NR_FILES_MASK) >> NR_FILES_SHIFT;
     files = NULL;
     if(*nr_files <= 0) goto exit;
     files = malloc(sizeof(char*) * (*nr_files));
@@ -681,7 +681,7 @@ char** fs_list(struct fs_import *import, char *name,
         current_file += strlen(current_file) + 1;
     }
     if(has_more != NULL)
-        *has_more = fsr->shadow_rsp.ret_val & HAS_MORE_FLAG;
+        *has_more = fsr->shadow_rsp.u.ret_val & HAS_MORE_FLAG;
     free_buffer_page(fsr);
     add_id_to_freelist(priv_req_id, import->freelist);
 exit:
@@ -719,7 +719,7 @@ int fs_chmod(struct fs_import *import, int fd, int32_t mode)
     schedule();
     
     /* Read the response */
-    ret = (int)fsr->shadow_rsp.ret_val;
+    ret = (int)fsr->shadow_rsp.u.ret_val;
     DEBUG("The following returned: %d\n", ret);
     add_id_to_freelist(priv_req_id, import->freelist);
 
@@ -761,7 +761,7 @@ int64_t fs_space(struct fs_import *import, char *location)
     schedule();
     
     /* Read the response */
-    ret = (int64_t)fsr->shadow_rsp.ret_val;
+    ret = (int64_t)fsr->shadow_rsp.u.ret_val;
     DEBUG("The following returned: %lld\n", ret);
     free_buffer_page(fsr);
     add_id_to_freelist(priv_req_id, import->freelist);
@@ -799,7 +799,7 @@ int fs_sync(struct fs_import *import, int fd)
     schedule();
     
     /* Read the response */
-    ret = (int)fsr->shadow_rsp.ret_val;
+    ret = (int)fsr->shadow_rsp.u.ret_val;
     DEBUG("Close returned: %d\n", ret);
     add_id_to_freelist(priv_req_id, import->freelist);
 
@@ -852,7 +852,7 @@ moretodo:
 
         rsp = RING_GET_RESPONSE(&import->ring, cons); 
         DEBUG("Response at idx=%d to request id=%d, ret_val=%lx\n", 
-            cons, rsp->id, rsp->ret_val);
+            cons, rsp->id, rsp->u.ret_val);
         req = &import->requests[rsp->id];
         memcpy(&req->shadow_rsp, rsp, sizeof(struct fsif_response));
         DEBUG("Waking up: %s\n", req->thread->name);
index 6abd3543ba2ee248eac861992bc25dcd2960965e..e2b6f499b87a7f6342fcaef1942d9a585d28e259 100644 (file)
@@ -89,7 +89,7 @@ static void dispatch_file_open(struct fs_mount *mount, struct fsif_request *req)
     FS_DEBUG("Writing response at: idx=%d, id=%d\n", rsp_idx, req_id);
     rsp = RING_GET_RESPONSE(&mount->ring, rsp_idx);
     rsp->id = req_id; 
-    rsp->ret_val = (uint64_t)fd;
+    rsp->u.ret_val = (uint64_t)fd;
 }
 
 static void dispatch_file_close(struct fs_mount *mount, struct fsif_request *req)
@@ -119,7 +119,7 @@ static void dispatch_file_close(struct fs_mount *mount, struct fsif_request *req
     FS_DEBUG("Writing response at: idx=%d, id=%d\n", rsp_idx, req_id);
     rsp = RING_GET_RESPONSE(&mount->ring, rsp_idx);
     rsp->id = req_id; 
-    rsp->ret_val = (uint64_t)ret;
+    rsp->u.ret_val = (uint64_t)ret;
 }
 
 #define MAX_GNTS 16
@@ -190,7 +190,7 @@ static void end_file_read(struct fs_mount *mount, struct fs_request *priv_req)
     FS_DEBUG("Writing response at: idx=%d, id=%d\n", rsp_idx, req_id);
     rsp = RING_GET_RESPONSE(&mount->ring, rsp_idx);
     rsp->id = req_id; 
-    rsp->ret_val = (uint64_t)aio_return(&priv_req->aiocb);
+    rsp->u.ret_val = (uint64_t)aio_return(&priv_req->aiocb);
 }
 
 static void dispatch_file_write(struct fs_mount *mount, struct fsif_request *req)
@@ -261,7 +261,7 @@ static void end_file_write(struct fs_mount *mount, struct fs_request *priv_req)
     FS_DEBUG("Writing response at: idx=%d, id=%d\n", rsp_idx, req_id);
     rsp = RING_GET_RESPONSE(&mount->ring, rsp_idx);
     rsp->id = req_id; 
-    rsp->ret_val = (uint64_t)aio_return(&priv_req->aiocb);
+    rsp->u.ret_val = (uint64_t)aio_return(&priv_req->aiocb);
 }
 
 static void dispatch_stat(struct fs_mount *mount, struct fsif_request *req)
@@ -294,24 +294,24 @@ static void dispatch_stat(struct fs_mount *mount, struct fsif_request *req)
     FS_DEBUG("Writing response at: idx=%d, id=%d\n", rsp_idx, req_id);
     rsp = RING_GET_RESPONSE(&mount->ring, rsp_idx);
     rsp->id = req_id; 
-    rsp->fstat.stat_ret = (uint32_t)ret;
-    rsp->fstat.stat_mode  = stat.st_mode;
-    rsp->fstat.stat_uid   = stat.st_uid;
-    rsp->fstat.stat_gid   = stat.st_gid;
+    rsp->u.fstat.stat_ret = (uint32_t)ret;
+    rsp->u.fstat.stat_mode  = stat.st_mode;
+    rsp->u.fstat.stat_uid   = stat.st_uid;
+    rsp->u.fstat.stat_gid   = stat.st_gid;
 #ifdef BLKGETSIZE
     if (S_ISBLK(stat.st_mode)) {
        unsigned long sectors;
        if (ioctl(fd, BLKGETSIZE, &sectors)) {
            perror("getting device size\n");
-           rsp->fstat.stat_size = 0;
+           rsp->u.fstat.stat_size = 0;
        } else
-           rsp->fstat.stat_size = sectors << 9;
+           rsp->u.fstat.stat_size = sectors << 9;
     } else
 #endif
-       rsp->fstat.stat_size  = stat.st_size;
-    rsp->fstat.stat_atime = stat.st_atime;
-    rsp->fstat.stat_mtime = stat.st_mtime;
-    rsp->fstat.stat_ctime = stat.st_ctime;
+       rsp->u.fstat.stat_size  = stat.st_size;
+    rsp->u.fstat.stat_atime = stat.st_atime;
+    rsp->u.fstat.stat_mtime = stat.st_mtime;
+    rsp->u.fstat.stat_ctime = stat.st_ctime;
 }
 
 
@@ -344,7 +344,7 @@ static void dispatch_truncate(struct fs_mount *mount, struct fsif_request *req)
     FS_DEBUG("Writing response at: idx=%d, id=%d\n", rsp_idx, req_id);
     rsp = RING_GET_RESPONSE(&mount->ring, rsp_idx);
     rsp->id = req_id; 
-    rsp->ret_val = (uint64_t)ret;
+    rsp->u.ret_val = (uint64_t)ret;
 }
 
 static void dispatch_remove(struct fs_mount *mount, struct fsif_request *req)
@@ -382,7 +382,7 @@ static void dispatch_remove(struct fs_mount *mount, struct fsif_request *req)
     FS_DEBUG("Writing response at: idx=%d, id=%d\n", rsp_idx, req_id);
     rsp = RING_GET_RESPONSE(&mount->ring, rsp_idx);
     rsp->id = req_id; 
-    rsp->ret_val = (uint64_t)ret;
+    rsp->u.ret_val = (uint64_t)ret;
 }
 
 
@@ -429,7 +429,7 @@ static void dispatch_rename(struct fs_mount *mount, struct fsif_request *req)
     FS_DEBUG("Writing response at: idx=%d, id=%d\n", rsp_idx, req_id);
     rsp = RING_GET_RESPONSE(&mount->ring, rsp_idx);
     rsp->id = req_id; 
-    rsp->ret_val = (uint64_t)ret;
+    rsp->u.ret_val = (uint64_t)ret;
 }
 
 
@@ -490,7 +490,7 @@ static void dispatch_create(struct fs_mount *mount, struct fsif_request *req)
     FS_DEBUG("Writing response at: idx=%d, id=%d\n", rsp_idx, req_id);
     rsp = RING_GET_RESPONSE(&mount->ring, rsp_idx);
     rsp->id = req_id; 
-    rsp->ret_val = (uint64_t)ret;
+    rsp->u.ret_val = (uint64_t)ret;
 }
 
 static void dispatch_list(struct fs_mount *mount, struct fsif_request *req)
@@ -560,7 +560,7 @@ error_out:
     FS_DEBUG("Writing response at: idx=%d, id=%d\n", rsp_idx, req_id);
     rsp = RING_GET_RESPONSE(&mount->ring, rsp_idx);
     rsp->id = req_id; 
-    rsp->ret_val = ret_val;
+    rsp->u.ret_val = ret_val;
 }
 
 static void dispatch_chmod(struct fs_mount *mount, struct fsif_request *req)
@@ -591,7 +591,7 @@ static void dispatch_chmod(struct fs_mount *mount, struct fsif_request *req)
     FS_DEBUG("Writing response at: idx=%d, id=%d\n", rsp_idx, req_id);
     rsp = RING_GET_RESPONSE(&mount->ring, rsp_idx);
     rsp->id = req_id; 
-    rsp->ret_val = (uint64_t)ret;
+    rsp->u.ret_val = (uint64_t)ret;
 }
 
 static void dispatch_fs_space(struct fs_mount *mount, struct fsif_request *req)
@@ -632,7 +632,7 @@ static void dispatch_fs_space(struct fs_mount *mount, struct fsif_request *req)
     FS_DEBUG("Writing response at: idx=%d, id=%d\n", rsp_idx, req_id);
     rsp = RING_GET_RESPONSE(&mount->ring, rsp_idx);
     rsp->id = req_id; 
-    rsp->ret_val = (uint64_t)ret;
+    rsp->u.ret_val = (uint64_t)ret;
 }
 
 static void dispatch_file_sync(struct fs_mount *mount, struct fsif_request *req)
@@ -681,7 +681,7 @@ static void end_file_sync(struct fs_mount *mount, struct fs_request *priv_req)
     FS_DEBUG("Writing response at: idx=%d, id=%d\n", rsp_idx, req_id);
     rsp = RING_GET_RESPONSE(&mount->ring, rsp_idx);
     rsp->id = req_id; 
-    rsp->ret_val = (uint64_t)aio_return(&priv_req->aiocb);
+    rsp->u.ret_val = (uint64_t)aio_return(&priv_req->aiocb);
 }
 
 struct fs_op fopen_op     = {.type             = REQ_FILE_OPEN,
index 81acf4f6c3b2e726cecddd5d971e64acd4d4cd3d..537476aa8b67e72cde50b99ebc785ca940172ed4 100644 (file)
@@ -48,7 +48,7 @@ long do_platform_op(XEN_GUEST_HANDLE(xen_platform_op_t) u_xenpf_op)
                 break;
             }
             ret = set_px_pminfo(op->u.set_pminfo.id,
-                    &op->u.set_pminfo.perf);
+                                &op->u.set_pminfo.u.perf);
             break;
 
         case XEN_PM_CX:
index bb2f31380d32dd930abf098b84c394a58420dcc5..1dc0017a23b2d92a2cbdd219def7613888eb9689 100644 (file)
@@ -359,7 +359,7 @@ ret_t do_platform_op(XEN_GUEST_HANDLE(xen_platform_op_t) u_xenpf_op)
                 ret = -ENOSYS;
                 break;
             }
-            ret = set_px_pminfo(op->u.set_pminfo.id, &op->u.set_pminfo.perf);
+            ret = set_px_pminfo(op->u.set_pminfo.id, &op->u.set_pminfo.u.perf);
             break;
  
         case XEN_PM_CX:
@@ -368,7 +368,7 @@ ret_t do_platform_op(XEN_GUEST_HANDLE(xen_platform_op_t) u_xenpf_op)
                 ret = -ENOSYS;
                 break;
             }
-            ret = set_cx_pminfo(op->u.set_pminfo.id, &op->u.set_pminfo.power);
+            ret = set_cx_pminfo(op->u.set_pminfo.id, &op->u.set_pminfo.u.power);
             break;
 
         case XEN_PM_TX:
index 15acff963b0b040273d01a3aa45ba3d94adf0348..3183e4d244792c49072929155b92642858b11a7a 100644 (file)
@@ -1,3 +1,6 @@
+XEN_ROOT:=$(BASEDIR)/..
+include $(XEN_ROOT)/Config.mk
+
 ifneq ($(CONFIG_COMPAT),)
 
 compat-arch-$(CONFIG_X86) := x86_32
@@ -35,6 +38,9 @@ suffix-$(CONFIG_X86)      := \#pragma pack()
 
 endif
 
+public-$(CONFIG_X86) := $(wildcard public/arch-x86/*.h public/arch-x86/*/*.h)
+public-$(CONFIG_IA64) := $(wildcard public/arch-ia64/*.h public/arch-ia64/*/*.h)
+
 .PHONY: all
 all: $(headers-y)
 
@@ -67,5 +73,18 @@ compat/xlat.h: xlat.lst $(filter-out compat/xlat.h,$(headers-y)) $(BASEDIR)/tool
        done >$@.new
        mv -f $@.new $@
 
+ifeq ($(XEN_TARGET_ARCH),$(XEN_COMPILE_ARCH))
+# public/arch-ia64.h explicitly bails on __STRICT_ANSI__
+ifeq ($(CONFIG_IA64),)
+
+all: headers.chk
+
+headers.chk: $(filter-out public/arch-% public/%ctl.h public/xsm/% public/%hvm/save.h, $(wildcard public/*.h public/*/*.h) $(public-y)) Makefile
+       for i in $(filter %.h,$^); do $(CC) -ansi -include stdint.h -Wall -W -Werror -S -o /dev/null -xc $$i || exit 1; echo $$i; done >$@.new
+       mv $@.new $@
+
+endif
+endif
+
 clean::
        rm -rf compat
diff --git a/xen/include/headers.chk b/xen/include/headers.chk
new file mode 100644 (file)
index 0000000..ad2c87f
--- /dev/null
@@ -0,0 +1,39 @@
+public/callback.h
+public/dom0_ops.h
+public/elfnote.h
+public/event_channel.h
+public/features.h
+public/grant_table.h
+public/kexec.h
+public/memory.h
+public/nmi.h
+public/physdev.h
+public/platform.h
+public/sched.h
+public/tmem.h
+public/trace.h
+public/vcpu.h
+public/version.h
+public/xencomm.h
+public/xen-compat.h
+public/xen.h
+public/xenoprof.h
+public/hvm/e820.h
+public/hvm/hvm_info_table.h
+public/hvm/hvm_op.h
+public/hvm/ioreq.h
+public/hvm/params.h
+public/io/blkif.h
+public/io/console.h
+public/io/fbif.h
+public/io/fsif.h
+public/io/kbdif.h
+public/io/netif.h
+public/io/pciif.h
+public/io/protocols.h
+public/io/ring.h
+public/io/tpmif.h
+public/io/usbif.h
+public/io/vscsiif.h
+public/io/xenbus.h
+public/io/xs_wire.h
index d35cce53e4d891375bd1ab97768e6af6a3adf247..03d4ce7a4dd868f04ac98812f7b23db08b36da8c 100644 (file)
@@ -27,6 +27,8 @@
 #ifndef __XEN_PUBLIC_EVENT_CHANNEL_H__
 #define __XEN_PUBLIC_EVENT_CHANNEL_H__
 
+#include "xen.h"
+
 /*
  * Prototype for this hypercall is:
  *  int event_channel_op(int cmd, void *args)
index ad116e71e18e0ff1dca14745a4b782ad05000cea..71f125a3034863e6d9810463ff21e5a8fce512ac 100644 (file)
@@ -28,6 +28,7 @@
 #ifndef __XEN_PUBLIC_GRANT_TABLE_H__
 #define __XEN_PUBLIC_GRANT_TABLE_H__
 
+#include "xen.h"
 
 /***********************************
  * GRANT TABLE REPRESENTATION
index f0ada2d758d9586eedac80544d9e381067091162..c5b25985764e020900e5df2cc81fb70f48a1e393 100644 (file)
@@ -21,6 +21,8 @@
 #ifndef __XEN_PUBLIC_HVM_HVM_OP_H__
 #define __XEN_PUBLIC_HVM_HVM_OP_H__
 
+#include "../xen.h"
+
 /* Get/set subcommands: extra argument == pointer to xen_hvm_param struct. */
 #define HVMOP_set_param           0
 #define HVMOP_get_param           1
index 260aac78597252f40073a14bdb4aa52fed2f9679..8fc21740ea5a5cefc9bc99c191559e9203ff1f71 100644 (file)
@@ -169,7 +169,7 @@ struct fsif_response {
     union {
         uint64_t ret_val;
         struct fsif_stat_response fstat;
-    };
+    } u;
 };
 
 typedef struct fsif_response fsif_response_t;
index f6a49ab6bf6546d40ba2643c115ed3bd6dfb044a..24b5619fd8ad29adc872e5fee9de63df6a6aa803 100644 (file)
@@ -60,6 +60,7 @@ struct xsd_errors
     int errnum;
     const char *errstring;
 };
+#ifdef EINVAL
 #define XSD_ERROR(x) { x, #x }
 /* LINTED: static unused */
 static struct xsd_errors xsd_errors[]
@@ -82,6 +83,7 @@ __attribute__((unused))
     XSD_ERROR(EAGAIN),
     XSD_ERROR(EISCONN)
 };
+#endif
 
 struct xsd_sockmsg
 {
index ba4051e95fe05d019bf34b6db8ed315f4a11b183..2af19de6f887a384a52cc4c93f5ef22f36f6162f 100644 (file)
@@ -27,6 +27,8 @@
 #ifndef __XEN_PUBLIC_MEMORY_H__
 #define __XEN_PUBLIC_MEMORY_H__
 
+#include "xen.h"
+
 /*
  * Increase or decrease the specified domain's memory reservation. Returns the
  * number of extents successfully allocated or freed.
index b2b84018a3f810c214710cb7bf53d7103d342f89..2fd21d2dad5059b90705412435883fbbec1111a0 100644 (file)
@@ -27,6 +27,8 @@
 #ifndef __XEN_PUBLIC_NMI_H__
 #define __XEN_PUBLIC_NMI_H__
 
+#include "xen.h"
+
 /*
  * NMI reason codes:
  * Currently these are x86-specific, stored in arch_shared_info.nmi_reason.
index cb7e4d469bc992c6b0d0f4191f88752e69956b43..29374024e158edbb9107f44fd07e5c365d5bf0e6 100644 (file)
@@ -21,6 +21,8 @@
 #ifndef __XEN_PUBLIC_PHYSDEV_H__
 #define __XEN_PUBLIC_PHYSDEV_H__
 
+#include "xen.h"
+
 /*
  * Prototype for this hypercall is:
  *  int physdev_op(int cmd, void *args)
index eee047be41f63b44f495a4df4cf4bda3d10f8fa9..c69fdab8ad4a9ac3cbb5c502868c3aaa19b5d118 100644 (file)
@@ -307,7 +307,7 @@ struct xenpf_set_processor_pminfo {
     union {
         struct xen_processor_power          power;/* Cx: _CST/_CSD */
         struct xen_processor_performance    perf; /* Px: _PPC/_PCT/_PSS/_PSD */
-    };
+    } u;
 };
 typedef struct xenpf_set_processor_pminfo xenpf_set_processor_pminfo_t;
 DEFINE_XEN_GUEST_HANDLE(xenpf_set_processor_pminfo_t);
index ab6549370ec18e10bf4db48c2efeeb77024bd280..f592036f230d3ce436259212c178f6de4d896e6a 100644 (file)
@@ -27,6 +27,8 @@
 #ifndef __XEN_PUBLIC_VCPU_H__
 #define __XEN_PUBLIC_VCPU_H__
 
+#include "xen.h"
+
 /*
  * Prototype for this hypercall is:
  *  int vcpu_op(int cmd, int vcpuid, void *extra_args)